package modelo;

import java.util.List;

import org.junit.Assert;
import org.junit.Test;

public class BuqueTests {

	public Buque buque;
	
	@Test
	public void testVerificarCoordenadasBuqueHorizontal()
	{
		Coordenada posicion = new Coordenada(1,1);
		Movimiento movimiento = new MovimientoAlNorte();
		Orientacion miOrientacion = new OrientacionHorizontal();
		buque = new Buque(posicion,movimiento,miOrientacion);
		
		List<Coordenada> listaAVerificar = buque.obtenerUbicacion();
		
		Coordenada pos1 = listaAVerificar.get(0);
		Assert.assertEquals(pos1.getX(),1);
		Assert.assertEquals(pos1.getY(),1);
		
		Coordenada pos2 = listaAVerificar.get(1);
		Assert.assertEquals(pos2.getX(),2);
		Assert.assertEquals(pos2.getY(),1);	
		
		Coordenada pos3 = listaAVerificar.get(2);
		Assert.assertEquals(pos3.getX(),3);
		Assert.assertEquals(pos3.getY(),1);	
		
		Coordenada pos4 = listaAVerificar.get(3);
		Assert.assertEquals(pos4.getX(),4);
		Assert.assertEquals(pos4.getY(),1);	
	};
	

	@Test
	public void testVerificarCoordenadasBuqueVertical()
	{
		Coordenada posicion = new Coordenada(1,1);
		Movimiento movimiento = new MovimientoAlNorte();
		Orientacion miOrientacion = new OrientacionVertical();
		buque = new Buque(posicion,movimiento,miOrientacion);
		
		List<Coordenada> listaAVerificar = buque.obtenerUbicacion();
		
		Coordenada pos1 = listaAVerificar.get(0);
		Assert.assertEquals(pos1.getX(),1);
		Assert.assertEquals(pos1.getY(),1);
		
		Coordenada pos2 = listaAVerificar.get(1);
		Assert.assertEquals(pos2.getX(),1);
		Assert.assertEquals(pos2.getY(),2);	
		
		Coordenada pos3 = listaAVerificar.get(2);
		Assert.assertEquals(pos3.getX(),1);
		Assert.assertEquals(pos3.getY(),3);	
		
		Coordenada pos4 = listaAVerificar.get(3);
		Assert.assertEquals(pos4.getX(),1);
		Assert.assertEquals(pos4.getY(),4);	
	};
	
	@Test
	public void testUnDisparoEnCualquierParteDestruyeBuqueCompleto(){
		
		Coordenada posicion1 = new Coordenada(2,5);
		Movimiento movimiento = new MovimientoAlSur();
		Orientacion miOrientacion = new OrientacionVertical();
		buque = new Buque(posicion1,movimiento,miOrientacion);
		Municion disparo = new Disparo(posicion1);
		
		disparo.atacar(buque);
		//buque.recibirAtaqueDeDisparo(disparo);
		
		Assert.assertTrue(buque.estaDestruida());
		
		Coordenada posicion2 = new Coordenada(2,7);
		disparo = new Disparo(posicion2);
		buque = new Buque(posicion1,movimiento,miOrientacion);
		buque.recibirAtaqueDeDisparo(disparo);
	
		Assert.assertTrue(buque.estaDestruida());
	}

	@Test
	public void testMoverBuque(){
		
		Coordenada posicion = new Coordenada(1,1);
		Movimiento movimiento = new MovimientoAlSur();
		Orientacion miOrientacion = new OrientacionVertical();
		buque = new Buque(posicion,movimiento,miOrientacion);
		
		List<Coordenada> listaAVerificar = buque.obtenerUbicacion();
		
		Coordenada pos1 = listaAVerificar.get(0);
		Assert.assertEquals(pos1.getX(),1);
		Assert.assertEquals(pos1.getY(),1);
		
		Coordenada pos2 = listaAVerificar.get(1);
		Assert.assertEquals(pos2.getX(),1);
		Assert.assertEquals(pos2.getY(),2);	
		
		Coordenada pos3 = listaAVerificar.get(2);
		Assert.assertEquals(pos3.getX(),1);
		Assert.assertEquals(pos3.getY(),3);	
		
		Coordenada pos4 = listaAVerificar.get(3);
		Assert.assertEquals(pos4.getX(),1);
		Assert.assertEquals(pos4.getY(),4);	
		
		buque.mover();
		
		List<Coordenada> listaAVerificar2 = buque.obtenerUbicacion();
		
		Coordenada pos5 = listaAVerificar2.get(0);
		Assert.assertEquals(pos5.getX(),1);
		Assert.assertEquals(pos5.getY(),2);
		
		Coordenada pos6 = listaAVerificar2.get(1);
		Assert.assertEquals(pos6.getX(),1);
		Assert.assertEquals(pos6.getY(),3);

		Coordenada pos7 = listaAVerificar2.get(2);
		Assert.assertEquals(pos7.getX(),1);
		Assert.assertEquals(pos7.getY(),4);
		
		Coordenada pos8 = listaAVerificar2.get(3);
		Assert.assertEquals(pos8.getX(),1);
		Assert.assertEquals(pos8.getY(),5);
	}
	
	@Test
	public void testMoverBuqueSobreElLimiteEInvertirVertical(){
		
		Coordenada posicion = new Coordenada(1,1);
		Movimiento movimiento = new MovimientoAlNorte();
		Orientacion miOrientacion = new OrientacionVertical();
		buque = new Buque(posicion,movimiento,miOrientacion);
		
		List<Coordenada> listaAVerificar = buque.obtenerUbicacion();
		
		Coordenada pos1 = listaAVerificar.get(0);
		Assert.assertEquals(pos1.getX(),1);
		Assert.assertEquals(pos1.getY(),1);
		
		Coordenada pos2 = listaAVerificar.get(1);
		Assert.assertEquals(pos2.getX(),1);
		Assert.assertEquals(pos2.getY(),2);	
		
		Coordenada pos3 = listaAVerificar.get(2);
		Assert.assertEquals(pos3.getX(),1);
		Assert.assertEquals(pos3.getY(),3);	
		
		Coordenada pos4 = listaAVerificar.get(3);
		Assert.assertEquals(pos4.getX(),1);
		Assert.assertEquals(pos4.getY(),4);	
		
		buque.mover(); //Para que llegue al 0.
		buque.mover(); //Rebota
		
		List<Coordenada> listaAVerificar2 = buque.obtenerUbicacion();
		
		Coordenada pos5 = listaAVerificar2.get(0);
		Assert.assertEquals(pos5.getX(),1);
		Assert.assertEquals(pos5.getY(),1);
		
		Coordenada pos6 = listaAVerificar2.get(1);
		Assert.assertEquals(pos6.getX(),1);
		Assert.assertEquals(pos6.getY(),2);

		Coordenada pos7 = listaAVerificar2.get(2);
		Assert.assertEquals(pos7.getX(),1);
		Assert.assertEquals(pos7.getY(),3);
		
		Coordenada pos8 = listaAVerificar2.get(3);
		Assert.assertEquals(pos8.getX(),1);
		Assert.assertEquals(pos8.getY(),4);

	}

	
}
